ヘッダーをスキップ
Oracle TimesTen In-Memory Database C開発者およびリファレンス・ガイド
リリース6.0
B25764-02
  目次へ
目次
索引へ
索引

前へ
前へ
次へ
次へ
 

XLAデータ型

この項では、この章で説明されているXLA関数で使用されるデータ型について説明します。これらのデータ型は、次のファイルで定義されています。

install_dir/bits/include/tt_xla.h 
 

XLAアプリケーションの作成時に、このファイルをインクルードする必要があります。

XLAデータ型の概要

データ型
説明
レコード・タイプについて記述します。XLAによって返されるレコードの先頭で使用されます。
更新レコードについて記述します。
XLAのステータス情報について記述します(ttXlaStatusによって返されます)。
XLAのリリース情報について記述します(ttXlaGetVersionによって返されます)。
表情報について記述します(ttXlaGetTableInfoによって返されます)。
列情報について記述します(ttXlaGetColumnInfoによって返されます)。
XLAブックマークで使用されるLSNポインタについて記述します。

ttXlaNodeHdr_t

XLAのほとんどのデータ型は、データのレコード・タイプおよび長さについて記述する標準ヘッダーで始まります。標準ヘッダーの型はttXlaNodeHdr_tです。

このヘッダーには、次のフィールドが含まれています。

フィールド
説明
nodeType
char
レコードのタイプ。
  • TTXLANHVERSION: バージョン
  • TTXLANHUPDATE: 更新
  • TTXLANHTABLEDESC: 表記述
  • TTXLANHCOLDESC: 列記述
  • TTXLANHSTATUS: ステータス
  • TTXLANHINVALID: 無効
byteOrder
char
レコードのバイト順序。
1 = ビッグ・エンディアン
2 = リトル・エンディアン
length
SQLUINTEGER
すべての添付ファイルを含むレコードの全長。

ttXlaUpdateDesc_t

ttXlaUpdateDesc_t構造体は、データ・ストア内の単一行(またはタプル)への更新処理について記述します。ttXlaNextUpdateまたはttXlaNextUpdateWait関数によって返される各更新レコードは、固定長ヘッダーttXlaUpdateDesc_tで始まり、その後に0(ゼロ)から2行のデータ・ストアからの行が続きます。行データはttXlaUpdateDesc_tヘッダーにレポートされたレコード・タイプによって異なります。

注意: 永続モードでは、SETREPL、SETTBLIおよびSETCOLIは返されません。

flagsフィールドは、レコード更新の特別なオプションのビットマップです。

connIDフィールドは、更新を開始したODBC接続ハンドルを識別します。この値を使用すると、更新が同一の接続から行われたかどうかを確認できます。

個別のコミットXLAレコードは、ttApplicationContextをコールした後にXLAレコードを生成する処理が行われない場合に生成されます。ttApplicationContextプロシージャについては、「アプリケーションのコンテキストの受渡し」を参照してください。

注意:

XLAは、次の通知を受信できません。

特別な更新データの書式

ttXlaTblDesc_tヘッダーの後には、更新レコードに含まれているデータが続きます。この項では、特定のSQL処理に関連した特別な更新レコードのデータ書式について説明します。

CREATE TABLE

CREATE TABLEの場合、特別な行の値は、新しい表について記述するttXlaTblDesc_tレコードおよびその後に続く、各列について記述するttXlaColDesc_tレコードで構成されています。

ALTER TABLE

ALTER TABLEの場合、特別な行の値は、ttXlaDropColumnTup_tまたはttXlaAddColumnTup_t値およびその後に続く、列について記述するttXlaColDesc_tレコードで構成されます。

ttXlaDropTableTup_t

DROP TABLE処理の場合、行の値は次のようになります。

フィールド
説明
tblName
char (31)
削除された表の名前。
tblOwner
char (31)
削除された表の所有者。

ttXlaTruncateTableTup_t

TRUNCATE TABLE処理の場合、行の値は次のようになります。

フィールド
説明
tblName
char (31)
切り捨てられた表の名前。
tblOwner
char (31)
切り捨てられた表の所有者。

ttXlaCreateIndexTup_t

CREATE INDEX処理の場合、行の値は次のようになります。

フィールド
説明
tblName
char (31)
索引が定義される表の名前。
tblOwner
char (31)
索引が定義される表の所有者。
ixName
char (31)
新しい索引の名前。
flag
char (1)
索引フラグ。
P =プライマリ
F =外部
R =標準
nixcols
SQLUINTEGER
索引付けされた列の数。
ixColsSys
SQLUINTEGER (16)
システム番号を使用して索引付けされた列番号。
ixColsUser
SQLUINTEGER (16)
ユーザー定義列IDを使用して索引付けされた列番号。
ixType
char
'T' = Tツリー
'H' = ハッシュ
ixUnique
char
'U' = 一意索引
'N' = 非一意索引
pages
SQLUINTEGER
ハッシュ索引のページ数。

ttXlaDropindexTup_t

DROP INDEX処理の場合、行の値は次のようになります。

フィールド
説明
tblName
char (31)
索引が削除された表の名前。
tblOwner
char (31)
索引が削除された表の所有者。
ixName
char (31)
削除された索引の名前。

ttXlaAddColumnTup_t

列の追加の場合、行の値は次のようになります。

フィールド
説明
ncols
SQLUINTEGER
追加列の数。

この特別な行の後に、新しい列について記述するttXlaColDesc_tレコードが続きます。

ttXlaDropColumnTup_t

列の削除の場合、行の値は次のようになります。

フィールド
説明
ncols
SQLUINTEGER
削除された列の数。

この特別な行の後に、削除された列について記述するttXlaColDesc_tレコードの配列が続きます。

ttXlaCreateSeqTup_t

CREATE SEQUENCE処理の場合、行の値は次のようになります。

フィールド
説明
sqName
char (31)
順序の名前。
sqOwner
char (31)
順序の所有者。
cycle
char
順序番号ジェネレータが、最大値または最小値に達した後も番号の生成を続行するかどうかを指定します。
指定可能な値は、次のとおりです。
1 =サイクルする。
0 =サイクルしない。
minval
SQLBIGINT
順序の最小値。
maxval
SQLBIGINT
順序の最大値。
incr
SQLBIGINT
順序番号間の増分。正の値は昇順、負の値は降順を示します。
降順では、値の範囲は最大値から最小値までになります。昇順では、その逆になります。

ttXlaDropSeqTup_t

DROP SEQUENCE処理の場合、行の値は次のようになります。

フィールド
説明
sqName
char (31)
順序の名前。
sqOwner
char (31)
順序の所有者。

ttXlaViewDesc_t

CREATE MATERIALIZED VIEW処理の場合、行の値は次のようになります。

フィールド
説明
vwName
char (31)
マテリアライズド・ビューの名前。
vwOwner
char (31)
マテリアライズド・ビューの所有者。
sysTableID
SQLUBIGINT
SYS.TABLESに格納されたシステム表ID。

ttXlaDropViewTup_t

マテリアライズド・ビューに対するDROP VIEW処理の場合、行の値は次のようになります。

フィールド
説明
vwName
char (31)
マテリアライズド・ビューの名前。
vwOwner
char (31)
マテリアライズド・ビューの所有者。

ttXlaSetTableTup_t

表ID設定処理の場合、更新レコードの主要部分で以前に割り当てられたアプリケーション表識別子を使用し、アプリケーション表識別子の新しい値を特別な行に指定するように記述されます。

フィールド
説明
newID
SQLUBIGINT
新しいユーザー定義の表ID。

ttXlaSetColumnTup_t

列ID設定処理の場合、次の特別な行が記述されます。

フィールド
説明
oldUserColID
SQLUINTEGER
以前のユーザー定義の列ID値。
newUserColID
SQLUINTEGER
新しいユーザー定義の列ID値。
sysColID
SQLUINTEGER
システム列ID。

ttXlaSetStatusTup_t

表のレプリケーション・ステータスの変更の場合、次の特別な行が記述されます。

フィールド
説明
oldStatus
SQLUINTEGER
以前のレプリケーション・ステータス。
newStatus
SQLUINTEGER
新しいレプリケーション・ステータス。

ttXlaUpdateDesc_tヘッダーの後に続く行データのアドレスの検出

更新レコードを取得する手順およびttXlaUpdateDesc_tヘッダーの内容を確認する手順の詳細は、「トランザクション・ログからの更新レコードの取得」および「レコード・ヘッダーの確認および行アドレスの検出」を参照してください。次に、これらの手順の概要を示します。

更新ヘッダーの直後に行データが続きます。行データは、ttXlaGetColumnInfoによって返されるttXlaColDesc_t構造体に指定されているオフセットとともに内部形式で格納されます。

更新ヘッダーのサイズにそのアドレスを追加して、行データのアドレスを検出することができます。

次に例を示します。

char *Row = (char*)&ttXlaUpdateDesc_t + 
   sizeof(ttXlaUpdateDesc_t); 
 

UPDATETUPレコードの場合、ttXlaUpdateDesc_tヘッダーの後に2行のデータが続きます。1つ目の行には更新前のデータ、2つ目の行には更新後のデータが含まれています。

新しい行は古い行の直後に続くため、古い行の長さ(tuple1)にそのアドレスを追加して、新しい行のアドレスを計算することができます。

次に例を示します。

char *oldRow = (char*)&ttXlaUpdateDesc_t + sizeof(ttXlaUpdateDesc_t); char *newRow = oldRow + ttXlaUpdateDesc_t.tuple1;

返された行内の列データにアクセスする方法の詳細については、ttXlaColDesc_tを参照してください。

ttXlaStatus_t

ttXlaStatus_t構造体では、XLAシステムに関する実行時処理情報が示されます。非永続モードでXLAを処理する場合、このデータ型はttXlaStatus関数によって返されます。

フィールド
説明
header
標準データ・ヘッダー。
xlabuffree
SQLUBIGINT
ステージング・バッファ内の空き領域(バイト)。
xlabufminfree
SQLUBIGINT
ステージング・バッファ内の最小空き領域(バイト)。
xlabufalloc
SQLUBIGINT
ステージング・バッファ内の割当て済領域(バイト)。
xlabuftran
SQLUBIGINT
ステージング・バッファ内のトランザクションの数。
xlabufrec
SQLUBIGINT
ステージング・バッファ内のレコードの数。
logbuffree
SQLUBIGINT
トランザクション・ログ・バッファ内の空き領域(バイト)
logbufminfree
SQLUBIGINT
トランザクション・ログ・バッファ内の最小空き領域(バイト)。
logbufalloc
SQLUBIGINT
トランザクション・ログ・バッファ内の割当て済領域(バイト)。
flags
SQLUINTEGER
ステータス・フラグのビットマップ。現在、TTXLASTAT_STALLEDのみが定義されています。このフラグが設定されると、XLAステージング・バッファがいっぱいで新しい更新が拒否されていることを示します。

ttXlaVersion_t

XLAを将来拡張できるように、バージョン・データ型ttXlaVersion_tに、現在のXLAのバージョンおよびデータ型のバイト順序が記述されています。このデータ型はttXlaGetVersion関数によって返されます。

このデータ型には、次のフィールドが含まれています。

フィールド
説明
header
標準データ・ヘッダー。
hardware
char (16)
ハードウェア・プラットフォームの名前。
wordSize
SQLUINTEGER
システム固有のワード・サイズ(32または64)。
TTMajor
SQLUINTEGER
TimesTenメジャー・リリース番号。
TTMinor
SQLUINTEGER
TimesTenリリース番号。
TTPatch
SQLUINTEGER
TimesTenポイント・リリース番号。
OS
char (16)
オペレーティングシステムの名前。
OSMajor
SQLUINTEGER
オペレーティングシステムのメジャー・リリース番号。
OSMinor
SQLUINTEGER
オペレーティングシステムのリリース番号。

ttXlaTblDesc_t

表情報は、ttXlaTblDesc_tデータ型を使用して表現されます。このデータ型は、ttXlaGetTableInfo関数によって返されます。

このデータ型には、次のフィールドが含まれています。

フィールド
説明
header
標準データ・ヘッダー。
tblName
char (31)
表の名前(ヌル文字で終了)。
tblOwner
char (31)
表の所有者(ヌル文字で終了)。
sysTableID
SQLUBIGINT
一意のシステム定義識別子。
userTableId
SQLUBIGINT
ユーザー定義表識別子。
columns
SQLUINTEGER
列の数。
width
SQLUINTEGER
インライン行のサイズ。
nPrimCols
SQLUINTEGER
プライマリ列の数。
primColsSys
SQLUINTEGER (16)
システム主キー列番号。
primColsUser
SQLUINTEGER (16)
ユーザー定義主キー列番号。

インライン行のサイズには、すべての固定長列、NULL列フラグ、および可変長列のポインタ情報のためのスペースが含まれています。可変長列ごとに、4バイトのインライン行領域が使用されます。

表に宣言済の主キーがある場合は、次のようになります。

ttXlaColDesc_t

列情報は、ttXlaColDesc_tデータ型を使用して表現されます。このデータ型は、ttXlaGetColumnInfo関数によって返されます。

このデータ型には、次のフィールドが含まれています。

フィールド
説明
header
標準データ・ヘッダー。
colName
char (31)
列の名前。
sysColNum
SQLUINTEGER
列番号(1から始まります)。
userColNum
SQLUINTEGER
ユーザー割当ての列番号。
dataType
SQLUINTEGER
ODBC SQL_*コードのデータ型。
size
SQLUINTEGER
列の最大サイズまたは基本サイズ。
offset
SQLUINTEGER
列の固定長部分に対するオフセット。
nullOffset
SQLUINTEGER
NULLバイトに対するオフセット(NULL値可能でない場合は0(ゼロ)です)。
precision
SQLUSMALLINT
DECIMAL型の数値の精度。
scale
SQLUSMALLINT
DECIMAL型の数値のスケール。
flags
SQLUINTEGER
列フラグ。
  • TT_COLPRIMKEY: 列は主キーです。
  • TT_COLVARYING: 列はアウトラインで格納されています。
  • TT_COLNULLABLE: 列はNULL値可能です。
  • TT_COLUNIQUE: 列に一意の属性が定義されています。

ttXlaColDesc_t構造体を取得する手順およびその内容を確認する手順の詳細は、「列データの確認」を参照してください。次に、これれらの手順の概要を示します。

ttXlaColDesc_t構造体は、ttXlaGetColumnInfo関数によって返されます。この構造体には、特定の表の列情報にアクセスするために必要なメタデータが格納されています。たとえば、offsetフィールドを使用すると、ttXlaUpdateDesc_t構造体の後の更新レコードに返された行(一行または複数行)の特定の列データを検出できます。列値のアドレスは、返された行のアドレスにoffsetを追加して検出することができます。その後、dataTypeフィールドに基づいてこの値を対応するC型にキャストしたり、「複合データ型の変換」で説明されている変換ルーチンの1つに渡すことができます。

TimesTenの行データは、固定長データおよびその後に続く可変長データで構成されます。

固定長列データの場合、列のアドレスは、ttXlaColDesc_t構造体のoffset値に行のアドレスを追加したものです。

ttXlaColDesc_t colDesc; 
void* pColVal  = colDesc->offset + row; 
 

列の値は、データ型に対応する型ポインタを使用してこのポインタを参照解除すると取得できます。たとえば、SQL_INTEGERの場合、ODBC型はSQLINTEGERであるため、列の値は次のように入力すると取得できます。

*((SQLINTEGER*) pColVal))

可変長列データの場合、前述の手順で計算されたpColValは4バイトのオフセット値のアドレスになります。このオフセット値をpColValのアドレスに追加すると、可変長列データの先頭を指すポインタが示されます。64ビットのプラットフォームで処理が行われると想定すると、この場所の最初の8バイトはこのデータの長さ(var_len)で、その後に実際のデータ(var_data)が続きます。

この例では、VARCHAR文字列をコピーおよび出力します。

tt_ptrint* var_len = (tt_ptrint*)((char*)pColVal + *((int*)pColVal)); char* var_data = (char*)(var_len+1); char *buffer = malloc(*var_len+1); memcpy(buffer,var_data,*var_len); buffer[*var_len] = (char)NULL; /* NULL terminate the string */ printf("%s\n",buffer); free(buffer);

tt_LSN_t

ブックマークで使用されるLSNのポインタの記述です。このデータ型は、ttXlaUpdateDesc_t構造体によって使用されます。

フィールド
説明
LogFile
SQLUBIGINT
ログ・ファイル番号。
LogOffset
SQLUBIGINT
ログ・ファイル・オフセット。

tt_XlaLsn_t

ブックマークで使用されるLSNのポインタの記述です。このデータ型はttXlaGetLSN関数によって返され、ttXlaSetLSN関数によって使用されます。

checksumはXLAハンドル固有であり、すべてのLSNポインタが特定のXLA接続と関連付けられていることを保証します。

フィールド
説明
checksum
SQLUINTEGER
有効なLSNハンドルであることを保証するチェックサム。
xid
SQLUSMALLINT
トランザクションID。
LogFile
SQLUBIGINT
ログ・ファイル番号。
LogOffset
SQLUBIGINT
ログ・ファイル・オフセット。